#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMessageBox>

#include <QTimer>
#include <QTime>
#include <QDateTime>

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QPixmap>
#include <opencv2/opencv.hpp> // OpenCV 头文件

#include <qmqttclient.h>
#include <qmqtttopicfilter.h>
#include <QDebug>
#include <QByteArray>
#include <QRandomGenerator>

#include <QJsonDocument>
#include <QJsonObject>

#include <QFile>
#include <QFileDialog>
#include <QDir>

#include <QThread>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void currentimeshow();

    void on_pushButton_led_clicked();
    void on_pushButton_fan_clicked();
    void on_pushButton_sg90_clicked();
    void on_pushButton_bee_clicked();

    void onTimeout();               // 定时器超时触发槽函数
    void onImageDownloaded();       // 网络请求完成触发槽函数

    void on_pushButton_clicked();
    void on_pushButton_2_clicked();

    void onConnected();
    void onDisconnected();
    void onMessageReceived(const QByteArray &message);
    void publishDeviceStatus(const QString &deviceName, bool state);

    void onDeviceTimeout();
    void showDeviceStatus(bool online);

    void on_pushButton_auto_clicked();
    void autocontrol();


private:
    Ui::Widget *ui;

    QNetworkAccessManager *manager; // 网络管理对象
    QNetworkRequest request;        // 网络请求对象
    QTimer *timer;                  // 定时器对象

    QMqttClient *mqttClient; 

    int temperature;
    int humidity;
    int light;
    double cox;

    cv::VideoWriter videoWriter; // 视频写入器
    int frameWidth = 480;  // 视频宽度
    int frameHeight = 260; // 视频高度
    int fps = 10;          // 视频帧率
    bool isVideoWriterInitialized = false; // 标记视频写入器是否已初始化
    QPixmap currentPixmap; // 用于存储当前下载的图像

    QTimer *watchdogTimer;  // 定时器
    bool isDeviceOnline;    // 下位机在线状态

    bool stateflag;         // 模式
    bool endflag = true;    // 自动模式完成更新

    bool fan = false, led = false, sg90 = false, bee = false;
};
#endif // WIDGET_H
